const obj = { name: 'zhangsan' };

const p = new Proxy(obj, {
  /**
   *
   * @param {*} target 源对象
   * @param {*} prop 属性名
   * @param {*} value 设置的值
   * @param {*} receiver 普通情况下,是当前proxy对象,如果代理对象在原型链上,那么此时receiver就是原型对象
   * @returns 返回一个布尔值,表示设置属性的操作是否成功
   */
  set: (target, prop, value, receiver) => {
    console.log(target, prop, value, receiver);
    target[prop] = value;
    return true;
  },
});

p.name = 'lisi'; // 可以被拦截
console.log('设置后的proxy对象', p);

// 以 p 为原型创建一个对象
const ob = Object.create(p);
ob.age = 10; // 可以被拦截到
console.log('ob ==>', ob);
